<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<div id="box">
    <p id="fpara">我是段落A</p>
    <p id="para">我是段落B</p>
    <p>我是段落c</p>

</div>

    <script>
        //写IE6也能兼容的“寻找所有元素子节点的函数”
        //写IE6也能兼容的“寻找前一个元素兄弟节点的函数”
        //写IE6也能兼容的“获得某元素的所有兄弟节点的函数”
        
        var obox=document.getElementById('box')
        var opara=document.getElementById('para')
        var ofpara=document.getElementById('fpara')

        //写IE6也能兼容的“寻找所有元素子节点的函数”,类似children的功能
        function getChildren(node){
            //结果数组
            var children=[];
            //遍历node这个节点的所有子节点，判断每一个子节点的nodeType属性是不是1，即判断其是不是元素节点
            for(var i=0;i<node.childNodes.length;i++){
                if(node.childNodes[i].nodeType==1){
                    children.push(node.childNodes[i])
                }
            }
            return children;
        }
        console.log(getChildren(obox))//[p, p#para, p]

        //写IE6也能兼容的“寻找前一个元素兄弟节点的函数”,类似previousElementSibling
        function getPreviousElementSibling(node){
            var o=node;
            while(o.previousSibling!=null){
                if(o.previousSibling.nodeType==1){
                    //结束循环，找到了
                    return o.previousSibling;
                }
                //如果没有找到，则找前一个
                o=o.previousSibling;
            }
            //如果循环完了都没有找到前一个元素节点，说明这个节点是第一个，没有前一个了，则返回null
            return null
        }
        console.log(getPreviousElementSibling(ofpara))//null
        console.log(getPreviousElementSibling(opara))//<p id="fpara">我是段落A</p>

        //写IE6也能兼容的“获得某元素的所有兄弟节点的函数”
        function getAllElementsSibling(node){
            //前面的元素兄弟节点
            var prevs=[];
            //后面的元素兄弟节点
            var nexts=[];
            //得到前面元素节点数组
            var o=node;
            while(o.previousSibling!=null){
                if(o.previousSibling.nodeType==1){
                    prevs.unshift(o.previousSibling);//每次在最前面插入
                }
                o=o.previousSibling;
            }
            //得到后面元素节点的数组
            o=node;
            while(o.nextSibling!=null){
                if(o.nextSibling.nodeType==1){
                    nexts.push(o.nextSibling);//每次从后面推入
                }
                o=o.nextSibling;
            }
            //合并前后数组，然后返回
            return prevs.concat(nexts);
        }
        console.log(getAllElementsSibling(para))//[p#fpara, p]
    </script>
</body>
</html>